package model;

import java.util.ArrayList;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.validation.constraints.NotNull;

@Entity
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorColumn(name="LOCAVEL_TYPE", discriminatorType=DiscriminatorType.INTEGER)
public abstract class Locavel {
	
	private Long codigo;
	private String nome;
	private Categoria categoria;
	private ArrayList<String> palavrasChave;
	private Reserva reserva;
	private int totalUnidades;
	private int totalLocados = 0;
	
	@Column(name="locavel_id")
	@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
	public Long getCodigo() {
		return codigo;
	}
	
	public void setCodigo(Long codigo) {
		this.codigo = codigo;
	}
	
	@NotNull(message="O nome nao pode ser null")
	public String getNome() {
		return nome;
	}
	
	public void setNome(String nome) {
		this.nome = nome;
	}
	
	@NotNull(message="Insira uma categoria")
	@ManyToOne
	@JoinColumn(name="categoria_id")
	public Categoria getCategoria() {
		return categoria;
	}
	
	public void setCategoria(Categoria categoria) {
		this.categoria = categoria;
	}
	
	@Basic(fetch=FetchType.LAZY)
	public ArrayList<String> getPalavrasChave() {
		return palavrasChave;
	}
	
	public void setPalavrasChave(ArrayList<String> palavrasChave) {
		this.palavrasChave = palavrasChave;
	}

	@OneToOne
	public Reserva getReserva() {
		return reserva;
	}

	public void setReserva(Reserva reserva) {
		this.reserva = reserva;
	}

	@NotNull(message="Deve-se informar o total de unidades")
	public int getTotalUnidades() {
		return totalUnidades;
	}

	public void setTotalUnidades(int totalUnidades) {
		this.totalUnidades = totalUnidades;
	}

	public int getTotalLocados() {
		return totalLocados;
	}

	public void setTotalLocados(int totalLocados) {
		this.totalLocados = totalLocados;
	}

	
	
}
